package main

import (
	"fmt"
	"time"
)

// 将北京时间转为对应的毫秒时间戳
func beijingTimeToTimestamp(timeStr string) (int64, error) {
	// 设置北京时区
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		return 0, err
	}

	// 解析时间字符串
	layout := "2006-01-02 15:04:05"
	t, err := time.ParseInLocation(layout, timeStr, loc)
	if err != nil {
		return 0, err
	}

	// 返回毫秒时间戳
	return t.UnixMilli(), nil
}

// 将毫秒时间戳转为对应的北京时间
func timestampToBeijingTime(timestamp int64) (string, error) {
	// 设置北京时区
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		return "", err
	}

	// 将毫秒时间戳转换为时间对象
	t := time.UnixMilli(timestamp).In(loc)

	// 格式化为字符串
	layout := "2006-01-02 15:04:05"
	return t.Format(layout), nil
}

func main() {
	// 用户提供的北京时间
	times := []string{
		"2025-09-04 17:00:00",
		"2025-09-08 10:00:00",
	}

	fmt.Println("🕐 北京时间 ➡️ 毫秒时间戳:")
	fmt.Println("==========================")

	for _, timeStr := range times {
		timestamp, err := beijingTimeToTimestamp(timeStr)
		if err != nil {
			fmt.Printf("转换失败: %s, 错误: %v\n", timeStr, err)
			continue
		}

		fmt.Printf("北京时间: %s\n", timeStr)
		fmt.Printf("时间戳:   %d\n", timestamp)
		fmt.Println("------------------------")
	}

	fmt.Println("\n🕐 毫秒时间戳 ➡️ 北京时间:")
	fmt.Println("==========================")

	// 测试一些常见的时间戳
	testTimestamps := []int64{
		1756976400000,
		1757296800000,
	}

	for _, ts := range testTimestamps {
		beijingTime, err := timestampToBeijingTime(ts)
		if err != nil {
			fmt.Printf("转换失败: %d, 错误: %v\n", ts, err)
			continue
		}

		fmt.Printf("时间戳 %d ➡️ %s\n", ts, beijingTime)
	}
}
